﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Domain.PermisosModule.Entities;
using Cesave.Domain.Core.Specification;
using Cesave.Domain.PermisosModule.Resources;

namespace Cesave.Domain.PermisosModule.Contracts.VariedadesGrupos
{
    /// <summary>
    /// Especificación de búsqueda de grupos de variedades por medio
    /// del cultivo.
    /// </summary>
    public class VariedadesGruposByCultivoSpecification
        : Specification<VariedadesGrupo>
    {

        #region Private properties

        /// <summary>
        /// GUID del cultivo.
        /// </summary>
        private Guid _cultivoGuid = default(Guid);

        #endregion

        #region Constructor

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="cultivoGuid">
        /// GUID del cultivo.
        /// </param>
        public VariedadesGruposByCultivoSpecification(Guid cultivoGuid)
        {
            if (cultivoGuid == Guid.Empty)
                throw new ArgumentException(Messages.exception_InvalidArgument, "cultivoGuid");
            _cultivoGuid = cultivoGuid;
        }

        #endregion

        #region Specification overrides

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public override System.Linq.Expressions.Expression<Func<VariedadesGrupo, bool>> SatisfiedBy()
        {
            Specification<VariedadesGrupo> specification = new DirectSpecification<VariedadesGrupo>(g => g.CultivoGuid == _cultivoGuid);
            return specification.SatisfiedBy();
        }

        #endregion

    }
}
